#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "graphe.H"

void initialiserGraphe(Graphe *g)
{
	initialiserTabNoeud(&g->S);
	initialiserTabArc(&g->A);
}

void testamentGraphe(Graphe *g)
{
	testamentTabNoeud(&g->S);
	testamentTabArc(&g->A);	
}

Noeud* initialiseNoeud(int latitude, int longitude, const char * nomVille, const char * couleur)
{
	Noeud* N;
	N=(Noeud*)malloc(sizeof(Noeud));
	N->latitude=latitude;
	N->longitude=longitude;
	strcpy(N->nomVille,nomVille);
	strcpy(N->couleur,couleur);
	return N;
}

Arc* initialiseArc(Graphe *g, int distance, const char * Depart, const char * Arrivee)
{
	Arc* A;
	A=(Arc*)malloc(sizeof(Arc));
	A->distance=distance;
	Noeud* Dep=rechercheNoeud(&g->S, Depart);
	Noeud* Arr=rechercheNoeud(&g->S, Arrivee);
	if(Dep == 0 || Arr == 0) return 0;
	A->Depart=Dep;
	A->Arrivee=Arr;
	return A;
}

void creeFichierGraphe(const char * nomFichier, const Graphe * g)
{
  FILE *fd=fopen(nomFichier,"w");
  if (fd==NULL)
    {printf("Impossible d'ouvrir le fichier %s en ecriture \n",nomFichier);exit(1);}

	int i=0;
	for(i=0 ; i < g->S.derniere_position ; i++)
	{
		fprintf(fd,"%s %d %d %s\n",
		g->S.ad[i].nomVille,g->S.ad[i].latitude,g->S.ad[i].longitude,g->S.ad[i].couleur);
	}
	fprintf(fd,"# Arcs\n");
	for(i=0 ; i < g->A.derniere_position ; i++)
	{
		fprintf(fd,"%s %s %d\n",
		g->A.ad[i].Depart->nomVille,g->A.ad[i].Arrivee->nomVille,g->A.ad[i].distance);
	}
  fclose(fd);
}


void litFichierGraphe(const char * nomFichier, Graphe * g)
{
  FILE *fd=fopen(nomFichier,"r");
  if (fd==NULL)
    {printf("Impossible d'ouvrir le fichier %s en lecture \n",nomFichier);exit(1);}
	char nomVille[20];
	char nomVilleArr[20];
	char nomVilleDep[20];
	char couleur[20];
	char sep[10];
	int longitude,latitude,distance;
	Noeud* N;
	Arc* A;
	printf("ville \n");
  while(fscanf(fd,"%s %d %d %s",nomVille,&latitude,&longitude,couleur)==4)
  {
  printf("inside \n");
	N=initialiseNoeud( latitude, longitude, nomVille , couleur);
	ajoutNoeud(&(g->S), N);
    printf("ville : %s \n",nomVille);
  }
  fscanf(fd,"%s",sep);
  while(fscanf(fd,"%s %s %d",nomVilleDep,nomVilleArr,&distance)!=EOF)
  {
  printf("inside 3\n");
	A=initialiseArc(g, distance, nomVilleDep , nomVilleArr);
	printf("%d,%s,%s",distance,nomVilleDep,nomVilleArr);
  printf("inside 3\n");
	ajoutArc(&(g->A), A);
  }
  fclose(fd);
}
